// 引用express模块

const express = require('express');

const auth = require('./wechat/auth');
// 引入config模块
const {url} = require('./config');
// 创建app应用对象
const app = express();
//
// 引入wechat模块
const Wechat = require('./wechat/wechat');

// 引入sha1模块
const sha1 = require('sha1');

/**
 * 由于app.use 没有实现next方法
 * 所以需要将页面路由放到use的上面
 */
// 配置模板资源目录
app.set('views', './views');
// 配置模板引擎
app.set('view engine', 'ejs');
// 页面路由

// 创建实例对象
const wechatApi = new Wechat();

app.get('/search', async (req, res) => {

    /**
     * 生成js-sdk使用的签名
     * 1. 组合参与签名的四个参数：jsapi_ticket(临时票据),noncestr（随机字符串）, timestamp, url（当前服务器地址）
     * 2. 将其进行字典升序排序，以&拼接在一起
     * 3. 使用sha1加密，最终生成signature
     */
    // 随机字符串
    const noncestr = Math.random().toString().split('.')[1];
    // 时间戳
    const timestamp = Date.now();
    // 获取票据
    const {ticket} = await wechatApi.fetchJsApiTicket();

    // 组合
    const arr = [
        `jsapi_ticket=${ticket}`,
        `noncestr=${noncestr}`,
        `timestamp=${timestamp}`,
        `url=${url}/search`
    ];
    // 2 拼接
    const str = arr.sort().join('&');
    console.log(str);

    // 3. sha1加密
    const signature = sha1(str);

    // 渲染页面，将渲染好的页面返回给用户
    res.render('search', {
        signature,
        noncestr,
        timestamp
    });

})

// 接受处理所有消息
app.use(auth())


// 监听端口号
app.listen(8888, () => console.log('服务器启动成功了'));
